#ifndef GAMEWINDOW_H
#define GAMEWINDOW_H

#include <QWidget>
#include <QKeyEvent>
#include <QTimer>
#include <vector>

// 敌人类，表示游戏中的敌人
class Enemy {
public:
    int x, y;  // 敌人的坐标
    Enemy(int startX, int startY) : x(startX), y(startY) {}  // 构造函数，初始化敌人的坐标
    void move() { y += 5; }  // 敌人移动的方法，每次调用y坐标增加5
};

// 子弹类，表示游戏中的子弹
class Bullet {
public:
    int x, y;  // 子弹的坐标
    Bullet(int startX, int startY) : x(startX), y(startY) {}  // 构造函数，初始化子弹的坐标
    void move() { y -= 10; }  // 子弹移动的方法，每次调用y坐标减少10
};

// 游戏窗口类，继承自QWidget
class GameWindow : public QWidget {
    Q_OBJECT

public:
    GameWindow(QWidget *parent = nullptr);  // 构造函数，带有可选的父窗口参数
    ~GameWindow();  // 析构函数

protected:
    void paintEvent(QPaintEvent *event) override;  // 重写绘制事件
    void keyPressEvent(QKeyEvent *event) override;  // 重写键盘按下事件
    void keyReleaseEvent(QKeyEvent *event) override;  // 重写键盘释放事件

private slots:
    void updateGame();  // 更新游戏状态的槽函数
    void spawnEnemy();  // 生成敌人的槽函数

private:
    void startGame();  // 开始游戏
    void pauseGame();  // 暂停游戏
    void resetGame();  // 重置游戏

    QTimer *timer;  // 游戏更新的定时器
    QTimer *spawnTimer;  // 生成敌人的定时器
    int planeX, planeY;  // 飞机的坐标
    bool left, right, up, down;  // 飞机移动的方向标志
    std::vector<Enemy> enemies;  // 存储敌人的向量
    std::vector<Bullet> bullets;  // 存储子弹的向量
    int score;  // 游戏得分
    bool gamePaused;  // 游戏暂停标志

    // 检查碰撞的方法，判断两个矩形是否相交
    bool checkCollision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
};

#endif // GAMEWINDOW_H
